An invention described in commonly assigned United States Patent Publication 2003/0204634 provides a method to offload a communication protocol stack, such as a transmission control protocol (TCP) based protocol stack. Data that would normally be sent through a host NDIS (network driver interface specification) path that has multiple software layers to a network interface, is offloaded to a path that includes a switch layer and an offload target. The offload target is conventionally a peripheral device that includes a second processor that processes the offloaded network stack connection in hardware, software, or a combination of both. Tight synchronization with the host network stack and processing unit is required. A request to offload the stack is sent through the NDIS path to the offload target. The request includes a list of resource requirements so that the offload target has the information needed to allocate resources. Each layer in the NDIS path adds its resource requirements to the list. If the offload target accepts the request, the offload target allocates resources and sends an offload handle to each of the software layers so that the software layers can communicate with the offload target.
Once the offload target's acceptance of the offload is communicated to the software layer, the state for each software layer is sent to the offload target. Alternatively, the state may be sent with the offload request, with only changes to the state later sent to the offload target. Each state has state variables and each state variable may be classified as a constant variable, a cached variable, or a delegated variable. The constant variables do not change during the time the protocol stack is offloaded. Cached variables are managed by the CPU and updated in the offload target if they change. Delegated variables are handled by the offload target.
However, because the protocol stack is offloaded to the offload target for only specific connections, the host protocol stack and the offload target may communicate with neighbor peers without the other knowing about it. This means that the host protocol stack might improperly invalidate a neighbor cache entry because there had been no forward progress in the host protocol stack. It might be the case that there has been forward progress on the offloaded connection, making the invalidation of the neighbor cache entry improper.